package br.com.cefetrn.apoena.dominio.home;

// Generated 01/01/2008 17:35:51 by Hibernate Tools 3.2.0.b11

import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.hibernate.Query;

import br.com.cefetrn.apoena.dominio.entity.AreasAtuacaoProfissional;
import br.com.cefetrn.apoena.dominio.entity.AreasDeAtuacao;
import br.com.cefetrn.apoena.dominio.entity.AreasDeAtuacaoEntidadeExecutora;
import br.com.cefetrn.apoena.dominio.entity.EntidadeExecutora;
import br.com.cefetrn.apoena.dominio.entity.QualificacaoProfissional;
import br.com.cefetrn.apoena.util.HibernateUtil;

/**
 * Home object for domain model class EntidadeExecutora.
 * 
 * @see br.com.cefetrn.apoena.dominio.entity.EntidadeExecutora
 * @author Gilmar P.S.L.
 */
public class Home4EntidadeExecutora extends
		AxHomeGeneric<EntidadeExecutora, Integer> {

	@Override
	public EntidadeExecutora persist(EntidadeExecutora instance) {

		EntidadeExecutora entidade = null;

		if (instance != null) {

			Home4Login hl = new Home4Login();
			hl.setSession(getSession());
			hl.persist(instance.getLogin());

			Home4Endereco he = new Home4Endereco();
			he.setSession(getSession());
			he.persist(instance.getEndereco());

			entidade = super.persist(instance);
			
			if (instance.getAreasDeAtuacaoEntidadeExecutoras() != null
					&& !instance.getAreasDeAtuacaoEntidadeExecutoras().isEmpty()) {

				Home4AreasDeAtuacaoEntidadeExecutora hap = new Home4AreasDeAtuacaoEntidadeExecutora();
				hap.setSession(getSession());

				for (AreasDeAtuacaoEntidadeExecutora area : instance
						.getAreasDeAtuacaoEntidadeExecutoras()) {
					hap.persist(area);
				}
			}
		}
		return entidade;
	}

	public List<EntidadeExecutora> findEntidadesExecutoras(AreasDeAtuacao aa,
			String municipio) {
		String sql;
		StringBuilder tabelas = new StringBuilder(
				"Select ee from EntidadeExecutora ee");
		StringBuilder filtros = new StringBuilder(" where ");

		if (aa != null && StringUtils.isNotBlank(aa.getNome())) {
			tabelas.append(", AreasDeAtuacaoEntidadeExecutora  aae");
			filtros.append(" aae.entidadeExecutora = ee.id and aae.id ="
					+ aa.getId());

		} else {
			tabelas.append(" , Endereco e");
			filtros.append(" e.id = ee.endereco and e.cidade like '%"
					+ municipio + "%'");

		}
		if (aa != null && StringUtils.isNotBlank(aa.getNome())
				&& municipio != null) {
			tabelas.append(" , Endereco e");
			filtros.append(" and e.id = ee.endereco and e.cidade like '%"
					+ municipio + "%'");

		}
		if (aa != null || municipio != null) {

			sql = tabelas.toString() + filtros.toString();
			Query query = getSession().createQuery(sql);

			System.out.println(query.list());

			System.out.println(sql);
			return query.list();
		}
		return null;
	}

	@Override
	public EntidadeExecutora delete(EntidadeExecutora persistentInstance) {
		// TODO Auto-generated method stub
		Home4Pessoa pessoaHome = new Home4Pessoa();
		pessoaHome.setSession(getSession());
		pessoaHome.delete(persistentInstance.getPessoa());

		return super.delete(persistentInstance);
	}

	public static void main(String[] args) {

		AreasDeAtuacao a = new AreasDeAtuacao();
		a.setId(2);
		a.setNome("ASSISTÊNCIA E SERVIÇOS SOCIAIS");
		Home4EntidadeExecutora ee = new Home4EntidadeExecutora();
		ee.setSession(HibernateUtil.currentSession());
		String municipio = "natal";
		ee.findEntidadesExecutoras(a, municipio);

	}
}
